🌸 Sakurazaka46・Keyakizaka46 ブログアーカイブツール

櫻坂 46 と欅坂 46 のブログ記事をスクレイピング・保存・検索できるツールです。画像の自動ダウンロード機能付き。

✨ 主要機能

🏗️ システム構成

💾 データベース構造(SQLite)

データベースファイル: sakurazaka_blog.db

📋 テーブル構成

  1. members(櫻坂 46 現役メンバー情報)

    - id: メンバーID (例: 47)
    - name: メンバー名 (例: 森田ひかる)
    - blog_url: 櫻坂46 公式ブログURL
    
  2. blog_posts(ブログ記事)

    - id: 記事ID(自動採番)
    - member_id: メンバーID (外部キー)
    - member_name: メンバー名
    - url: 元ブログURL (一意)
    - title: 記事タイトル
    - date: 投稿日
    - content: 記事本文
    - site: サイト識別子 ('sakurazaka46' または 'keyakizaka46')
    - created_at: 保存日時
    
  3. blog_images(記事画像)

    - id: 画像ID(自動採番)
    - post_id: 記事ID (外部キー)
    - image_url: 元画像URL
    - local_path: ローカル保存パス
    

画像保存構造

images/
├── 森田ひかる_sakurazaka46/
├── 森田ひかる_keyakizaka46/
├── 小田倉麗奈_sakurazaka46/
├── 村山美羽_sakurazaka46/
└── ...

📦 インストール方法

🚀 使用方法

# CLIモードで起動
npm start

# または直接実行
node index.js

メニュー一覧:

  1. 🌐 Open member blog in browser

  2. 💾 Scrape and save sakurazaka46 blog posts(櫻坂 46)

    a) メンバー選択 → 33名から選択
    b) 記事数入力 → 1-100 または "all"
    c) 画像DL選択 → y/n
    d) 自動実行開始 → レート制限付きで安全にスクレイピング
    
  3. 🌳 Scrape Keyakizaka46 blog posts(欅坂 46)

    a) 欅坂46メンバー選択 → 現櫻坂46メンバーの欅坂時代から選択(27名)
    b) 記事数入力 → 1-100 または "all"
    c) 画像DL選択 → y/n
    d) 自動実行開始 → 欅坂46サイトから記事をスクレイピング
    
    対応メンバー例:
    - 菅井友香、渡邉理佐、守屋茜、森田ひかるなど
    - site識別子は "keyakizaka46" として保存
    
  4. 🔍 Search saved blog posts

  5. 🌐 Web ページビューアーを起動

  6. ❌ Exit

🌐 Web ビューアー(推奨・簡単操作)

npm start

ブラウザで http://localhost:3000 にアクセス

操作方法:

  1. 📊 統合表示: 櫻坂 46・欅坂 46 の記事を統合表示(サイトラベル付き)

  2. 🔍 検索画面(2 段階):

  3. 📊 表示モード切り替え:

  4. 👥 メンバー管理:

🤖 自動レート制限機能

スクレイピング時の自動制御:

🎯 主な機能詳細

1. スクレイピング機能

2. 画像最適化システム

3. Web ビューアー

4. 高度な検索

5. 投稿削除機能 🗑️

🛠️ 技術スタック

📊 統計情報・実行例

データベース情報確認

# 保存済み記事数を確認
node -e "const db = require('./database'); const d = new db(); d.getAllBlogPosts().then(posts => console.log(\`記事数: \${posts.length}\`));"

# 画像統計を確認
node -e "const {getImageStatsOptimized} = require('./imageDownloader'); console.log(getImageStatsOptimized());"

スクレイピング実行例

$ node index.js
=== Sakurazaka46 Blog Tool ===

? What would you like to do? 💾 Scrape and save sakurazaka46 blog posts

? Select a member: 森田ひかる (ID: 47)
? スクレイピングする記事数を入力("all"で全件): 3
? 画像をダウンロードしますか? Yes

森田ひかるさんのブログ記事を3件スクレイピング中...
  🚀 スクレイピング開始 - 適切な間隔で処理します
  📊 3件の投稿を処理します
  📄 [1/3] タイトル1
  📄 [2/3] タイトル2
  📄 [3/3] タイトル3
✨ スクレイピング完了: 3件 (1103.7秒)
📊 平均処理時間: 367.9秒/件
✓ Scraped 3 posts
Saving to database...
✓ データベースに保存しました

📷 画像をダウンロード中...
  📦 キャッシュ使用: post_12345_a1b2c3d4.jpg
  📥 ダウンロード開始: image001.jpg
  ✅ 保存完了: post_12346_b2c3d4e5.jpg (245.3KB)
  進捗: 1/3 完了
  ・・・
✨ ダウンロード完了: 3/3 成功

🗂️ ファイル構成

👥 対応メンバー

櫻坂 46(33 名)

井上梨名、武元唯衣、田村保乃、藤吉夏鈴、松田里奈、森田ひかる、山﨑天、 遠藤光莉、大園玲、大沼晶保、幸阪茉里乃、増本綺良、守屋麗奈、石森璃花、 遠藤理子、小田倉麗奈、小島凪紗、谷口愛季、中嶋優月、的野美青、向井純葉、 村井優、村山美羽、山下瞳月、浅井恋乃未、稲熊ひな、勝又春、佐藤愛桜、 中川智尋、松本和子、目黒陽色、山川宇衣、山田桃実

欅坂 46(27 名 - 元欅坂 46 メンバーの欅坂時代ブログ)

上村莉菜、尾関梨香、小池美波、小林由依、齋藤冬優花、佐藤詩織、菅井友香、 土生瑞穂、原田葵、守屋茜、渡辺梨加、渡邉理佐、井上梨名、関有美子、武元唯衣、 田村保乃、藤吉夏鈴、松田里奈、松平璃子、森田ひかる、山﨑天、遠藤光莉、大園玲、 大沼晶保、幸阪茉里乃、増本綺良、守屋麗奈

: 欅坂 46 メンバーは現在の櫻坂 46 メンバーの中から、欅坂 46 時代に活動していたメンバーのみが対象です。

📌 バージョン情報

Current Version: v1.0.0

主な機能

⚠️ 注意事項

🛠️ トラブルシューティング

🔧 よくある問題と解決法

📡 接続・取得エラー

💾 データベース関連エラー

🚨 「データベースエラー」が表示された場合:

  1. 安全な方法(推奨):

    # バックアップを作成
    cp sakurazaka_blog.db sakurazaka_blog_backup.db
    
    # 問題のあるDBを削除
    rm sakurazaka_blog.db
    
    # プログラム再起動(自動でDB再作成)
    npm start
    
  2. ファイルシステム を使用:

❓ データベースリセットの影響:

🗑️ 削除機能について

削除ボタン(🗑️)をクリックした場合:

画像ファイルを完全削除したい場合:

# 特定メンバーの画像フォルダを削除
rm -rf images/森田ひかる_sakurazaka46

# または全画像削除
rm -rf images/*

🔍 データベース内容の確認

SQLite でデータベースの中身を確認:

# 記事数確認
sqlite3 sakurazaka_blog.db "SELECT COUNT(*) FROM blog_posts;"

# メンバー一覧
sqlite3 sakurazaka_blog.db "SELECT * FROM members;"

# 特定メンバーの記事数
sqlite3 sakurazaka_blog.db "SELECT member_name, COUNT(*) FROM blog_posts GROUP BY member_id;"